
/**
 * @file AntennaThrust.hpp
 * Class to do Antenna Thrust calculation.
 */

#ifndef ANTENNA_THRUST_HPP
#define ANTENNA_THRUST_HPP

#include "ForceModel.hpp"
#include "ReferenceSystem.hpp"
#include "SolarSystem.hpp"

namespace gpstk
{

    /** @addtogroup GeoDynamics */
    //@{

    /** Class to do Antenna Thrust calculation.
     */
    class AntennaThrust : public ForceModel
    {
    public:

        /// Default constructor
        AntennaThrust() {};

        /// Default destructor
        virtual ~AntennaThrust() {};


        /// Set reference system
        inline AntennaThrust& setReferenceSystem(ReferenceSystem& ref)
        { pRefSys = &ref; return (*this); };

        /// Get reference system
        inline ReferenceSystem* getReferenceSystem() const
        { return pRefSys; };


        /// Set solar system
        inline AntennaThrust& setSolarSystem(SolarSystem& sol)
        { pSolSys = &sol; return (*this); };

        /// Get solar system
        inline SolarSystem* getSolarSystem() const
        { return pSolSys; };


        /// Return the force model name
        inline virtual std::string modelName() const
        { return "AntennaThrust"; }

        /** Compute acceleration (and related partial derivatives) of AT.
         * @param tt        TT
         * @param orbits    orbits
          */
        virtual void Compute( const CommonTime&   tt,
                              const satVectorMap& orbits );


    protected:

        /// Reference System
        ReferenceSystem* pRefSys;

        /// Solar System
        SolarSystem* pSolSys;

    }; // End of class 'AntennaThrust'

    // @}

}  // End of namespace 'gpstk'

#endif   // ANTENNA_THRUST_HPP
